package com.danbay.cloud.common.config;

import com.danbay.cloud.base.constants.SmsType;
import lombok.Data;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.HashMap;
import java.util.Map;

/**
 * @author SJG
 *         2018/1/10.
 */

@Data
@ConfigurationProperties(prefix = "sms")
public class SmsProperties implements InitializingBean {

    /**
     * 短信提供商信息
     */
    private ProviderInfo provider;

    /**
     * 短信签名
     */
    private String signName;

    /**
     * 短信模板id
     */
    private TemplateCodes templateCodes;

    /**
     * 短信模板或和id映射
     */
    private Map<String, String> templateCodeMap = new HashMap<>();

    @Override
    public void afterPropertiesSet() throws Exception {
        templateCodeMap.put(SmsType.DEFAULT_PWD.getPhrase(), templateCodes.getDefaultPwd());
        templateCodeMap.put(SmsType.RESET_PWD.getPhrase(), templateCodes.getResetPwd());
        templateCodeMap.put(SmsType.CHECK_CODE.getPhrase(), templateCodes.getCheckCode());
        templateCodeMap.put(SmsType.DOOR_PWD.getPhrase(), templateCodes.getDoorPwd());
        templateCodeMap.put(SmsType.FIND_PWD_CHECK_CODE.getPhrase(), templateCodes.getFindPwdCheckCode());
        templateCodeMap.put(SmsType.TENANT_TEMP_PWD.getPhrase(), templateCodes.getTenantTempPwd());
        templateCodeMap.put(SmsType.TENANT_PWD.getPhrase(), templateCodes.getTenantPwd());
        templateCodeMap.put(SmsType.TENANT_MOBILE_CHANGE.getPhrase(), templateCodes.getTenantMobileChange());
        templateCodeMap.put(SmsType.DOOR_TEMP_PWD.getPhrase(), templateCodes.getDoorTempPwd());
        templateCodeMap.put(SmsType.EMPLOYEE_REG_NOTICE.getPhrase(), templateCodes.getEmployeeRegNotice());
        templateCodeMap.put(SmsType.BIND_ACCOUNT_NOTICE.getPhrase(), templateCodes.getBindAccountNotice());
        templateCodeMap.put(SmsType.ACCOUNT_CHANGE_NOTICE.getPhrase(), templateCodes.getAccountChangeNotice());
        templateCodeMap.put(SmsType.REGISTER_NOTICE.getPhrase(), templateCodes.getRegisterNotice());
    }

    /**
     * 取短信模板id
     *
     * @param smsType 短信类型
     * @return 短信模板id
     */
    public String getTemplateCode(SmsType smsType) {
        return templateCodeMap.get(smsType.getPhrase());
    }

    @Data
    public static class ProviderInfo {
        /**
         * 短信提供商API域名
         */
        private String domain;
        /**
         * 短信产品名
         */
        private String product;
        /**
         * 账户名
         */
        private String accessKeyId;
        /**
         * 密码
         */
        private String accessKeySecret;
        /**
         * 连接超时时间毫秒
         */
        private Integer connectTimeout;
        /**
         * 读取超时时间
         */
        private Integer readTimeout;
        /**
         * 区域
         */
        private String regionId;
        /**
         * 区域端点名
         */
        private String endpointName;
    }

    @Data
    public static class TemplateCodes {
        /**
         * 发送默认密码
         */
        private String defaultPwd;
        /**
         * 发送重置密码
         */
        private String resetPwd;
        /**
         * 发送登录验证码
         */
        private String checkCode;
        /**
         * 发送门锁密码
         */
        private String doorPwd;
        /**
         * 找回密码验证码
         */
        private String findPwdCheckCode;
        /**
         * 租客临时密码
         */
        private String tenantTempPwd;
        /**
         * 租客密码
         */
        private String tenantPwd;
        /**
         * 租客手机号变更通知
         */
        private String tenantMobileChange;
        /**
         * 门锁临时密码
         */
        private String doorTempPwd;
        /**
         * 员工注册通知
         */
        private String employeeRegNotice;
        /**
         * 绑定账户通知
         */
        private String bindAccountNotice;
        /**
         * 账号变更通知
         */
        private String accountChangeNotice;
        /**
         * 注册通知
         */
        private String registerNotice;
    }
}